Matlab新版S | 您所在的位置:网站首页 › matlab function模块怎么用 › Matlab新版S |
目录
前言一、S-Function Builder的界面二、S-Function函数编写1.参数的初始化2.函数的编写
总结
前言
此次我使用的是Matlab2020b上的S-Function Builder,并且使用C语言编写。 提示:以下是本篇文章正文内容 一、S-Function Builder的界面
代码如下(示例): import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import warnings warnings.filterwarnings('ignore') import ssl ssl._create_default_https_context = ssl._create_unverified_context 2.函数的编写一般我们只需要用到void sfbuilder_movingAvg_Outputs_wrapper()和void sfbuilder_movingAvg_Update_wrapper() 这里值得注意的是设置的parameter是Outputs_wrappe函数中是只读的,因为xD[]和xC[]都只在Update_wrapper函数中才能进行更新。 首先说一下变量定义,一般我们的变量定义可以在一开始就定义,使用宏定义的方法,如下代码 宏定义代码如下: /* Includes_BEGIN */ #include #include #include #define Delata_angle 0.01 #define Pn 5; #define flux 0.2175 #define Ld 0.0034 #define Lq 0.0050 #define R 0.1341 /* Includes_END */ /* Externs_BEGIN */ /* extern double func(double a); */ /* Externs_END */另外的变量定义方法可以像下面的代码一样定义在前面,也可以定义在Outputs_wrapper的输出函数中。 变量定义代码如下: #define Delata_angle 0.01 #define Pn 5; #define flux 0.2175 #define Ld 0.0034 #define Lq 0.0050 #define R 0.1341 real_T MTPA_We=0.0; real_T MTPA_Fluxd=0.0; real_T MTPA_Fluxq=0.0; real_T MTPA_Ud=0.0; real_T MTPA_Uq=0.0; real_T Te1=0.0;或 void MTPA_BBC_Outputs_wrapper(const real_T *MTPA_Is, const real_T *Nr, const real_T *id_fb, const real_T *iq_fb, real_T *iq, real_T *id, const real_T *xD, const real_T *xC, const real_T *MTPA_Is_angle, const int_T p_width0, const real_T *VariableStep_Search_Flag, const int_T p_width1, const real_T *T_Flag, const int_T p_width2, const real_T *D_Flag, const int_T p_width3, const real_T *MTPA_delata_angle, const int_T p_width4) { /* Output_BEGIN */ real_T MTPA_We=0.0; real_T MTPA_Fluxd=0.0; real_T MTPA_Fluxq=0.0; real_T MTPA_Ud=0.0; real_T MTPA_Uq=0.0; real_T Te1=0.0;这里需要注意的是变量的类型,这里的real_T指的就是C语言中的double类型。要注意变量类型的统一。 其余部分只要根据C语言的内容进行书写就没什么大问题,但是值得注意的是:将模型定义的parameter赋值给程序中新定义的real_T的参数时会报“pointer value used where a floating point value was expected”这种错误,这样的原因是因为这种方法定义的参数和输入输出的变量一样都是一个数组指针的存储方式,所以需要在该参数的后面加上[0]来引用该数组中的第一个数值。 最后再指出一点,在Matlab中的S函数的if语句的使用与C语言中不同,它不支持if的嵌套。 总结总体而言S-Function函数用C语言的方式编程的使用方法还是比较简单的,但依旧没有m函数简单,但m函数对我而言有个很大的使用缺陷。比如我想使用当前时刻和上一时刻的差值,或者将当前时刻的值赋给一个之前已经给别的值进行赋值的参数后,m函数的编译器就会报错。我试过将该变量进行输出,并在模块外面加一个延时函数,但这样的效果依旧很麻烦,最后还是报错,我就懒得弄了,使用S函数的C语言编程则没有这样的问题。 由于水平和时间有限,并没有深究,也欢迎各位一起探讨。 |
CopyRight 2018-2019 实验室设备网 版权所有 |